from jsonpath import jsonpath
from loguru import logger
from tools.global_data import GlobalData
import allure


@allure.step("===响应结果提取数据设置为全局变量===")
def extract_data_from_response(resp_dict, extract_str):
    """从响应结果中提取extract字段的数据，并设置为全局变量
    :param resp_dict: 响应结果
    :param extract_str: excel中extract字段的值
    :return: None
    """

    # 1、把excel当中读取的提取表达式字符串，转成字典，进行遍历。
    extract_dict = eval(extract_str)
    for key, jsonpath_expr in extract_dict.items():
        # key就是变量名。value就是jsonpath表达式
        logger.info(f"变量名key:{key},jsonpath提取表达式为：{jsonpath_expr}")
        # 通过jsonpath从响应结果当中，获取真实的值。如果提取到了就是列表，如果没有就是False.
        result_list = jsonpath(resp_dict, jsonpath_expr)
        logger.info(f"提取后的结果：{result_list}")
        # 如果result_list提取到了值。设置为全局变量，string类型
        if result_list:
            setattr(GlobalData, key, str(result_list[0]))
            logger.info("设置为GlobalData类的类属性和值...")
            logger.info(f"全局变量名{key}，值为{getattr(GlobalData, key)}")
        else:
            logger.warning("没有提取到值。")


if __name__ == '__main__':
    resp_data = {"access_token": "fdfdfdf"}
    extract_data = {"token": "$..access_token"}
